Repository navigation
Conversation
…n prepare The registered-workgroup control registers a non-NGG copy of its fixture in synchronous mode and expected the lane-63 refusal to prove that preparation ran at registration. Since boykopovar#3546 a wave64 vertex program's lane-63 read builds on a 32-lane host, so the refusal never comes and agc_driver_prepared_shaders_registered_workgroup_sync fails on main on every host narrower than 64 lanes. The control now registers an LDS write followed by s_barrier, which a vertex program cannot build on any host width, so it also runs on 64-lane hosts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The replacement control does not depend on host width, unlike the lane-63 What I checked in the tree:
The One dependency worth naming for anyone touching this test later: the control relies on Written with AI assistance. |
What
agc_driver_prepared_shaders_registered_workgroup_syncfails onmain(bca7a29d) on 32-lane hosts withexpected preparation failure. It is also reported in the bodies of #4085 (RTX 4060, lavapipe) and #4120.Cause: two merges landed ten minutes apart. #2261's control registers a non-NGG copy of the registered-workgroup fixture in synchronous mode. It expected the lane-63 refusal (
v_readlane_b32 of lane 63 is outside) as proof that registration prepared the program eagerly. #3546 then made a wave64 vertex program's lane-63 read build on a 32-lane host, so the refusal no longer comes and nothing else throws.Fix (test only): the control registers a program that a vertex stage cannot build on any host width: the fixture's own
ds_write_b32followed bys_barrier, whichEmitBarrierrefuses (s_barrier in a vertex program that accesses LDS or GDS or writes memory is not implemented,SpirvFlowEmitter.cpp). The rest of the test is unchanged. The subgroup gate (subgroupSize < 64) is no longer needed, so the control now also runs on 64-lane hosts.Tested
CachyOS (Linux 7.2), GCC, Release, RTX 4090 (NVIDIA 615.78, 32-lane subgroups), on
mainbca7a29d.agc_driver_prepared_shaders*: 9/9 pass. Onmainwithout this change, 8/9:_registered_workgroup_syncfails as above.ShaderRegistry.cppmutated and restored byte for byte afterwards:if (false)at the registration-deferral line):_registered_workgroupand_syncboth fail (missing AGC user-data header).true): both fail (expected preparation failure).tools/check_conventions.py --base origin/mainandgit diff --check origin/mainpass.Not tested: Windows, lavapipe, a 64-lane host. The control has no subgroup or mesh-shading gate, and the program it registers is refused before any mesh path is involved.
Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code
Tested and written by Claude (AI assistant) on a contributor's machine.